The increasing need for faster data communication rates has led to corresponding needs for faster transmission of data between system components. Networking hardware is but one of the numerous applications in which such increased speed is needed. Within a high-speed router, data is typically transmitted between one or more integrated circuits. If such inter-chip data transmission speeds can be increased (e.g., in the range of 1 gigabits/second per pin), the overall speed/bandwidth of the connection between integrated circuits may also be increased.
Data transmission systems can include shared bus connections, in which bus lines may be commonly shared between multiple devices, and point-to-point connections, in which one device is connected to another by one or more direct signal lines. Bus oriented systems may have a number of drawbacks. Due to the number of devices attached to the bus lines (because they are shared among multiple devices) the inherent capacitance attached to the lines may be large, limiting the speed at which the lines may be effectively driven. Larger lines may consume higher amounts of power, as well. Still further, because a bus is commonly shared, some form of arbitration is typically included to enable one device to have control of the bus at a given time. Such arbitration needs can add to the complexity of the system. It is also noted that the inclusion of a common bus on a circuit board, or the like, requires a dedicated amount of area. This can work against the goal of manufacturing systems that are as physically compact as possible.
Various aspects of conventional data bus approaches will now be described.
A data communication system may have two devices connected by signal lines. Data may be transmitted from one device to another, and in the case of bi-directional buses, vice versa. Conventionally, idle codes may be transmitted from one device to another when no data values are transmitted.
Referring now to FIG. 9A, a conventional data communication system is set forth and designated by the general reference number 900. A conventional data communication system 900 may include two or more devices 902 and 904. Devices 902 and 904 may be connected by a number of signal lines 906. Data may be transmitted from a device 902 to another device 904 as electronic signals, which may be sent through signal lines 906. Signal lines may include data lines and/or a clock line.
Referring now to FIG. 9B, a group of signal lines in a conventional data communication system is set forth. A group of signal lines 906 may contain a number of signal lines 908 and a clock line 910. Signal lines 908 may be used to transmit data and/or control signal in a data communication system 900. A clock line 910 may transmit a periodic clock signal CLK, or the like, that can be used to synchronize a data receiving process at a receiving device.
Signal lines 908 may be configured into byte “lanes.” Each byte lane may transmit data in a unit, such as a byte (8-bits). Typically, each byte lane contains eight data lines, each of which may transmit one bit at a time. Thus, a byte lane may transmit one byte of data at a time. Signal lines connecting two or more devices (e.g., a shared bus or point-to-point connection) may include a number of byte lanes; and the byte lanes may be grouped together to transmit multi-byte data. A variety of configurations may be used to group signal lines. FIGS. 9C to 9E are examples of different conventional configurations of signal lines.
Referring now to FIG. 9C, a first example of a conventional configuration of signal lines in a data communication system is set forth. A bus may contain 64 signal lines including L0-L63 and a clock line 912. It is understood that the term “bus” as used herein may include shared type buses and/or point-to-point connections. A bus may be grouped into two double word lanes 914 and 916. Four adjacent byte lanes may be grouped into a double word lane 914 having 32 data lines L0-L31. Another four adjacent byte lanes may be grouped into another double word lane 916 having 32 data lines L32-L63. A clock line 912 may synchronize the signal transmission.
Referring now to FIG. 9D, a second example of a conventional configuration of signal lines in a data communication system 900 is set forth. A bus may be grouped into word lane groups 914, 916, 918 and 920. Each of two adjacent byte lanes may be grouped together to form a word lane. Two adjacent byte lanes (L0-L15) may be grouped into a lane 914. Two adjacent byte lanes (L16-L31) may be grouped into a lane 916. Thus eight byte lanes may be configured into four lane groups 914, 916, 918 and 920. Four group lanes 914, 916, 918 and 920 may simultaneously transmit four signal streams, each of which may transmit one word (two bytes) at a time.
Referring now to FIG. 9E, a third example of a configuration of signal lines in a data communication system 900 is set forth. A bus may be grouped into eight group lanes 922, 924, 926, 928, 930, 932, 934 and 936 and a clock line 912. Each of the byte lanes may represent a separate lane group. That is, a byte lane (L0-L7) may be a lane group 922. A byte lane (L8-L15) may be another lane group 924. Thus eight byte lanes may be configured into 8 group lanes 922, 924, 926, 928, 930, 932, 934 and 936. Eight group lanes 922-936 may transmit eight different data streams, each of which may transmit one byte at a time.
Thus, byte lanes may be configured into data streams of different data sizes. A configuration may have a mix of byte lanes and/or word lanes and/or double-word lanes. By separating byte lanes into different groups, data values may be simultaneously transmitted on the different lane groups between one pair or multiple pairs of sending and receiving devices.
Referring now to FIG. 9F, a conventional approach for signaling a lane grouping configuration is set forth. Before data values are sent through signal lines, a configuration command 938 may be sent to notify a receiving device about a lane grouping configuration.
For example, at time to, a configuration command 938 may be sent through the byte lanes 0-3 to configure the four byte lanes into two groups 940 and 942. It is understood that the configuration command may be a particular set of bits transmitted over one or more lanes. Further, such a configuration command may consume one or more clock cycles.
Upon receiving such a command, a receiving device may understand that subsequently transmitted data may be logically grouped according to an indicated configuration.
In the example of FIG. 9F, following a transmission of configuration data, data is shown transmitted according to a predetermined configuration. In particular, a first group of data D0-0 and D0-1 may be sent through byte lanes 0-1 940 at t1. A second group of data D1-0 and D1-1 may be sent through different byte lanes 2-3 942, also at time t1.
At time tn, another configuration command 944 may be sent through the data lines to reconfigure the four byte lanes into different groups such as lane groups 946 and 948. Lane group 946 may contain only one byte lane; and lane group 948 may contain three byte lanes. At time tn+1, data D0-0 may be sent through lane group 946 and data D1-0, D1-1 and D1-2 may be sent through lane group 948.
Thus, conventionally, one or more clock cycles may have to be reserved to transmit a configuration command prior to transmitting data.
In addition to lane grouping, another feature of conventional systems can be the use of “idle” codes. Using idle codes typically involves sending idle codes through different signal lines when data is not being transmitted from one device to another.
Referring now to FIG. 9G, a timing diagram is shown that illustrates a conventional use of idle codes for a collection of signals lines (shown as “Byte Lane”). At times t0, t1 and t5, signal lines may be in an idle state. An idle code 950, 952 and 960 may be sent through the signal lines to indicate that no data is being sent. It is understood that an idle code may be a predetermined set of bits that can indicate to a receiving device that data is not being sent.
When data is ready to be sent, idle codes may be replaced by data (which may include control data and/or information data, for example). Thus, in the example of FIG. 9G, before data 956 and 958 are sent through signal lines, a configuration command 954 may be sent that can indicate a lane grouping configuration. It should be noted that an idle code may be sent at any time when no data are being sent.
Conventionally, idle codes have been known that are transmitted and/or selected to reduce a resulting electromagnetic spectrum. In particular, idle codes may be interspersed with transmitted data to thereby reduce peaks in a resulting electromagnetic spectrum. This can reduce overall electronic magnetic interference (EMI). EMI is known to adversely effect data signal quality, which can lead to errors. Thus, such reductions in EMI may result in fewer errors than systems that do not account for a resulting electromagnetic spectrum.
Due to the variety of applications using high speed links, it would be desirable support reconfigurable data paths so that one link can support multi-width and multi-channel communication.